package com.xinchao.dao;

import com.github.pagehelper.Page;
import com.xinchao.model.Advertisement;
import com.xinchao.model.dto.AdvertisementApiDTO;
import com.xinchao.model.dto.AdvertisementListDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author dxy
 * @date 2018/9/18 17:09
 */
public interface AdvertisementMapper {
	/**
	 * 保存广告
	 *
	 * @param advertisement Advertisement
	 */
	void insertAdvertisement(Advertisement advertisement);

	/**
	 * 更新广告
	 *
	 * @param advertisement Advertisement
	 */
	void updateAdvertisementById(Advertisement advertisement);

	/**
	 * 通过ID获取广告
	 * @param advertisementId 广告ID
	 * @return Advertisement
	 */
	Advertisement getAdvertisementById(Long advertisementId);
	/**
	 * 获取广告列表
	 *
	 * @param advertiserName      广告主名称
	 * @param advertisementName   广告名称
	 * @param advertisementStatus 广告状态
	 * @param sex                 性别
	 * @param age                 年龄
	 * @return Page<AdvertisementListDTO>
	 */
	Page<AdvertisementListDTO> listAdvertisement(@Param("advertiserName") String advertiserName, @Param("advertisementName") String advertisementName,
	                                             @Param("advertisementStatus") Integer advertisementStatus,@Param("sex") Integer sex, @Param("age") String age);

	/**
	 * 通过广告主ID获取广告条数
	 *
	 * @param advertiserId 广告主ID
	 * @return Long
	 */
	Long countAdvertisementByAdvertiserId(Long advertiserId);

	/**
	 * 通过广告名称获取广告
	 * @param advertisementName 广告名称
	 * @return Advertisement
	 */
	Advertisement getAdvertisementByAdvertisementName(String advertisementName);

	/**
	 * 更新广告状态
	 *
	 * @param advertisementId     广告ID
	 * @param advertisementStatus 广告状态
	 */
	void updateAdvertisementStatus(@Param("advertisementId") Long advertisementId, @Param("advertisementStatus") Integer advertisementStatus);

	/**
	 * 获取所有广告
	 *
	 * @return List<Advertisement>
	 */
	List<Advertisement> listAllAdvertisement();

	/**
	 * 获取广告列表
	 * @param age 年龄
	 * @param declareGoodsAdvertisement 是否是品宣广告(0：是；1：否)
	 * @return List<AdvertisementApiDTO>
	 */
	List<AdvertisementApiDTO> listAdvertisementByAgeAndSex(@Param("age") String age, @Param("sex") Integer sex, @Param("declareGoodsAdvertisement") Integer declareGoodsAdvertisement);


	/**
	 * 获取所有广告名称
	 * @return List<String>
	 */
	List<String> listAllAdvertisementName();

	/**
	 * 获取广告总数
	 * @return Long
	 */
	Long countAdvertisement();
}
